/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.edu.nju.software.greencreditsystem.service;

import cn.edu.nju.software.greencreditsystem.DAO.ExcelDAO;
import cn.edu.nju.software.greencreditsystem.business.EnvironmentHandler;
import cn.edu.nju.software.greencreditsystem.domain.EnvironmentExcel;
import cn.edu.nju.software.greencreditsystem.factory.DAOFactory;
import java.sql.Date;
import java.util.List;

/**
 * 作者：韩天
 * 创建时间：2011-8-16
 * 类描述：环境报表的service封装类
 */
public class EnvironmentExcelService {
    
    /**
     * 方法描述：得到企业目前所有可见的EnvironmentExcel
     * param：enterpriseId——企业的id
     * return：
     */
    public List<EnvironmentExcel> getVisibleExcelList(int enterpriseId){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        return eDAO.getCurrentEnvironment(enterpriseId);
    }
    
    /**
     * 方法描述：添加企业提交环境报表的计划
     * param：enterpriseId——企业的id, beginYear,beginMonth,endYear,endMonth——提交报表的开始结束时间
     * return：
     */
    public void add_UploadPlan(int enterpriseId, int beginYear, int beginMonth, int endYear, int endMonth){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        //计算共需提交多少次环境报表
        int times = (endYear-beginYear)*12 + (endMonth-beginMonth)*1;
        //逐条添加计划
        int year = beginYear;
        int month = beginMonth;
        for(int i=0; i<times; i++){
            EnvironmentExcel tempExcel = new EnvironmentExcel();
            tempExcel.setBeginDate(new Date(year-1900, month-1, 1));
            tempExcel.setChecked(false);
            tempExcel.setDeadline(new Date(year-1900, month-1, 7));
            tempExcel.setPassed(false);
            //判断是否需要换年
            if(month >= 12){
                month = 1;
                year++;
            }else{
                month++;
            }
            eDAO.save(tempExcel, enterpriseId);
        }
    }
    
    /**
     * 方法描述：将文件内容填入
     * param：
     * return：
     */
    public void setExcelContent(int excelId, byte[] file){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        EnvironmentExcel eexcel = eDAO.getEnvironmentExcel(excelId);
        eexcel.setData(file);
        eexcel.setSubmitDate(new Date(System.currentTimeMillis()));
        eDAO.update(eexcel);
    }
    
    /**
     * 方法描述：根据企业id取出未审报表
     * param：
     * return：
     */
    public List<EnvironmentExcel> getUnckeckedExcel(int enterpriseId){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        return eDAO.getEnvironmentUnchecked(enterpriseId);
    }
    
    /**
     * 方法描述：根据企业id取出已审报表
     * param：
     * return：
     */
    public List<EnvironmentExcel> getCkeckedExcel(int enterpriseId){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        return eDAO.getEnvironmentChecked(enterpriseId);
    }
    
    /**
     * 方法描述：审核环境报表
     * param：
     * return：
     */
    public void checkExcel(int excelId, boolean passed, int enterpriseId){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        EnvironmentExcel eExcel = eDAO.getEnvironmentExcel(excelId);
        eExcel.setChecked(true);
        eExcel.setPassed(passed);
        eDAO.update(eExcel);
        //如果通过则交予后台处理
        if(passed){
            EnvironmentHandler.handle("E:/Programming/J2EE work/GreenCreditSystem/src/java/environment-coin.xml", eDAO.getEnvironmentExcel(excelId), enterpriseId);
        }
    }
    
    /**
     * 方法描述：根据ExcelId取出一条环境报表
     * param：
     * return：
     */
    public EnvironmentExcel get_Excel(int excelId){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        return eDAO.getEnvironmentExcel(excelId);
    }
    
    /**
     * 方法描述：取出所有未审环境报表数
     * param：
     * return：
     */
    public int getUnckeckedExcelCount(){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        return eDAO.getEnvironmentUnchecked().size();
    }
    
    /**
     * 方法描述：取出据企业下次提交天数
     * param：
     * return：
     */
    public int getNextLeftDays(int enterpriseId){
        ExcelDAO eDAO = DAOFactory.getExcelDAOInstance();
        return eDAO.nextEnvironment(enterpriseId);
    }
    
}
